<?php
namespace carrito;

class Carrito
{
	//atributos de la clase
	public $num_producto;
	private $cod_factura;
	private $cod_prod;
	private $cantidad;
	private $descuento;
	private $neto;
	private $iva;
	private $total;
	private $precio_venta;
	private $costo;
	private $nombre_prod;

	//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
	//inicializa el numero de productos a 0
	function __construct()
	{
		$this->num_producto=0;
	}

	function setcod_factura($cod_factura,$linea)
	{
		$this->cod_factura[$linea]=$cod_factura;
	}

	function setcod_prod($cod_prod,$linea)
	{
		$this->cod_prod[$linea]=$cod_prod;
	}

	function setcantidad($cantidad,$linea)
	{
		$this->cantidad[$linea]=$cantidad;
	}
	function setcosto($costo,$linea)
	{
		$this->costo[$linea] = $costo;
	}
	function setdescuento($descuento,$linea)
	{
		$this->descuento[$linea]=$descuento;
	}

	function setneto($neto,$linea)
	{
		$this->neto[$linea]=$neto;
	}

	function setprecio_venta($precio_venta,$linea)
	{
		$this->precio_venta[$linea]=$precio_venta;
	}

	function setiva($iva,$linea)
	{
		$this->iva[$linea]=$iva;
	}

	function settotal($total,$linea)
	{
		$this->total[$linea]=$total;
	}

	function setnombre_prod($nombre_prod,$linea)
	{
		$this->nombre_prod[$linea]=$nombre_prod;
	}

	function getcod_factura($num)
	{
		return $this->cod_factura[$num];
	}

	function getcod_prod($num)
	{
		return $this->cod_prod[$num];
	}

	function getcantidad($num)
	{
		return $this->cantidad[$num];
	}

	function getcosto($num)
	{
		return $this->costo[$num];
	}

	function getdescuento($num)
	{
		return $this->descuento[$num];
	}

	function getneto($num)
	{
		return $this->neto[$num];
	}

	function getprecio_venta($num)
	{
		return $this->precio_venta[$num];
	}

	function getiva($num)
	{
		return $this->iva[$num];
	}

	function gettotal($num)
	{
		return $this->total[$num];
	}

	function getnombre_prod($num)
	{
		return $this->nombre_prod[$num];
	}

	//Retorna valor de la ultima posicion del array
	function getnum_producto()
	{
		return $this->num_producto;
	}
	 
	//Retorna la posicion del producto en el array
	function getpos_producto($cod_prod)
	{
		//recorre cada producto ingresado
		for( $i = 0 ; $i < $this->getnum_producto() ; $i++ )
		{
			//compara el codigo del producto con el codigo que se quiere ingresar
			if( $this->getcod_prod($i) != -1 && $this->getcod_prod($i) == $cod_prod)
			{
				//si existe retorna la linea del producto
				return (int)$i;
			}
		}
		 
		return false;

	}
	 
	//valida si el producto esta ingresado en el carrito
	function existe_producto($cod_prod)
	{
		 
		//recorre cada producto ingresado
		for( $i = 0 ; $i < $this->getnum_producto() ; $i++ )
		{
			//compara el codigo del producto con el codigo que se quiere ingresar
			if( $this->getcod_prod($i) != -1 && $this->getcod_prod($i) == $cod_prod)
			{
				//si existe retorna verdadero
				return true;
			}
		}
		 
		//Si no existe un producto ingresado con el mismo codigo retorna falso
		return false;

	}
	 
	//Introduce un producto en el array
	function introduce_producto($cod_factura,$cod_prod,$cantidad,$descuento,$precio,$nombre_prod,$costo)
	{

		//Si el producto no existe en el carrito, lo ingresa normalmente
		if(!$this->existe_producto($cod_prod))
		{
			 
			$neto = $cantidad * ($precio - round($precio * $descuento/100));
			$iva = round($neto * 0.19);
			$total = $neto + $iva;
			$this->setcod_factura($cod_factura,$this->num_producto);
			$this->setnombre_prod($nombre_prod,$this->num_producto);
			$this->setcod_prod($cod_prod,$this->num_producto);
			$this->setcantidad($cantidad,$this->num_producto);
			$this->setdescuento($descuento,$this->num_producto);
			$this->setneto($neto,$this->num_producto);
			$this->setprecio_venta($precio - round($precio * $descuento/100),$this->num_producto);
			$this->setiva($iva,$this->num_producto);
			$this->settotal($total,$this->num_producto);
			$this->setcosto($costo,$this->num_producto);
			$this->num_producto++;
		} //si el producto existe en el carrito, actualiza la cantidad y neto
		else
		{
			//obtiene posicion del producto
			$pos = $this->getpos_producto($cod_prod);
			 
			//obtiene cantidad actual y se suma a la nueva cantidad
			$cantidadActual = $this->getcantidad($pos);
			$cantidad = $cantidad + $cantidadActual;
			 
			//recalcula todo con la nueva cantidad y valores ingresados
			$neto = $cantidad * ($precio - round($precio * $descuento/100));
			$iva = round($neto * 0.19);
			$total = $neto + $iva;
			$this->setcod_factura($cod_factura,$pos);
			$this->setnombre_prod($nombre_prod,$pos);
			$this->setcod_prod($cod_prod,$pos);
			$this->setcantidad($cantidad,$pos);
			$this->setdescuento($descuento,$pos);
			$this->setneto($neto,$pos);
			$this->setprecio_venta($precio - round($precio * $descuento/100),$pos);
			$this->setiva($iva,$pos);
			$this->settotal($total,$pos);
			$this->setcosto($costo,$pos);
		}

		return true;
	}

	function elimina_producto ($linea)
	{
		$this->setcod_prod(-1,$linea);
	}

	function vacio()
	{
		$cont=0; // cuenta los productos activos
		for($i = 0 ; $i < $this->getnum_producto() ; $i++)
		{
		if($this->getcod_prod($i) != -1 && $this->getcantidad($i) > 0)
		{
		$cont++;
		}
		}
		return $cont <= 0;
}

}
?>